home *** CD-ROM | disk | FTP | other *** search
- Include "equ.h"
- Include "impequ.h"
-
-
- SECTION MACPAINT,CODE,PUBLIC
-
- ***************************************************
- *** ***
- ***************************************************
- dumbentry:
- clr.l d0
- rts
-
- dc.l "IMPP" ; magik number for pic import
- dc.w 200
- dc.l 0
-
- table: dc.l 0
- dc.l name,special,check,macp
-
-
- ***************************************
- ** Is it really a MacPaint file? **
- ***************************************
- check: move.l table,a0
- move.l buff1(a0),a1
- move.l (a1),a1
- add.l #65,a1
- lea test,a0
- moveq #3,d0
- ck0: cmp.b (a1)+,(a0)+
- bne never
- dbf d0,ck0
- bra right
-
- ***************************************
- ** **
- ***************************************
- macp: move.l sp,savesp
-
- move.l table,a0
- move.l flen(a0),a0
- move.l (a0),piclength
-
- move.l table,a0
- move.l f_openr(a0),a0
- jsr (a0)
- beq rrts
-
- move.l table,a0
- move.l spclnum(a0),a0
- cmp.w #1,(a0)
- beq impobj
-
-
- ***************************************
- ** **
- ***************************************
- imppic: move.l table,a0
- move.l p_open(a0),a0
- jsr (a0)
- beq rrts
-
- bsr getpicinfo
-
- move.l table,a4
- move.l cwptr(a4),a4 ;ptr to window handle
- move.l (a4),a4 ;window handle
- move.l (a4),a4 ;ptr to window structure
-
- lea pic,a0
- move.w pc_Type(a0),pi_Type(a4)
- move.w pc_SFreq(a0),pi_SFreq(a4)
- move.w pc_SAngle(a0),pi_SAngle(a4)
- move.w pc_SSpot(a0),pi_SSpot(a4)
- move.l pc_SMap(a0),pi_SMap(a4)
- move.l pc_SMap+4(a0),pi_SMap+4(a4)
- move.w pc_XDpi(a0),pi_XDpi(a4)
- move.w pc_YDpi(a0),pi_YDpi(a4)
- move.w pc_W(a0),pi_W(a4)
- move.w pc_H(a0),pi_H(a4)
- move.w pc_Width(a0),pi_Width(a4)
- move.w pc_BitPln(a0),pi_BitPln(a4)
- move.w pc_Palet(a0),pi_Palet(a4)
-
- move.w pi_Palet(a4),d1
- mulu #pl_Sizeof,d1
- move.w pi_Width(a4),d0
- mulu pi_BitPln(a4),d0
- mulu pi_H(a4),d0
- add.l d1,d0 ;size of bitmap +( 4 words * #colors)
-
- clr.w d1
- clr.w d2
- move.l table,a0
- move.l m_alloc(a0),a0
- jsr (a0)
- beq abortpic
-
- move.l table,a3
- move.l cwptr(a3),a3
- move.l (a3),a3
- move.l (a3),a3
- move.l a0,pi_Ptr(a3)
- move.l (a0),a4
- move.l a4,picptr
-
- bsr putpic
-
- move.l table,a0
- move.l p_close(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
-
- abortpic:
- bsr purgepic
-
- move.l table,a0
- move.l p_abort(a0),a0
- jsr (a0)
-
- abort0: move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
-
- ***************************************
- ** **
- ***************************************
- impobj: move.l table,a0
- move.l o_open(a0),a0
- jsr (a0)
- beq abort0
-
- bsr getpicinfo
-
- move.b #tpic,object+ob_Type
- clr.l object+ob_Left
- clr.l object+ob_Top
-
- move.w pic+pc_W,d1
- move.l #7200,d0
- bsr Mulu1632
- move.w pic+pc_XDpi,d2
- bsr Divu1648
- move.l d0,object+ob_Right
-
- move.w pic+pc_H,d1
- move.l #7200,d0
- bsr Mulu1632
- move.w pic+pc_YDpi,d2
- bsr Divu1648
- move.l d0,object+ob_Bottom
-
- clr.b object+ob_Flag
- clr.w object+ob_Slant
- clr.w object+ob_Twist
- move.w #50,object+ob_LWidth ;1 point line
- clr.b object+ob_LType ;no line
- move.b #1,object+ob_LColor ;black line
- clr.b object+ob_FType ;no fill
- move.b #1,object+ob_FColor ;black fill
- clr.b object+ob_LBegin
- clr.b object+ob_LEnd
- move.w #900,object+ob_HStandOff ;1/8 inch
- move.w #900,object+ob_VStandOff ;1/8 inch
- *
- *
- move.l table,a1
- move.l o_obj(a1),a1
- lea object,a0
- jsr (a1)
- beq abortobj
-
- move.w pic+pc_Width,d0
- mulu pic+pc_BitPln,d0
- mulu pic+pc_H,d0
- move.w pic+pc_Palet,d1
- mulu #pl_Sizeof,d1
- add.l d1,d0
- add.l #pc_Sizeof,d0
-
- move.l table,a0
- move.l o_malloc(a0),a0
- jsr (a0)
- beq abortobj
-
- lea pic,a1
- clr.l pc_DPtr(a1)
- clr.w pc_DScale(a1)
- move.w pc_Palet(a1),d0
- mulu #pl_Sizeof,d0
- add.l #pc_Sizeof,d0
- move.l d0,pc_Ptr(a1)
-
- move.w #pc_Sizeof/2-1,d0
- oppic1: move.w (a1)+,(a0)+
- dbf d0,oppic1
- move.l a0,picptr
-
- bsr putpic
-
- move.l table,a0
- move.l o_close(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
- abortobj:
- bsr purgepic
-
- move.l table,a0
- move.l o_abort(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
-
- *******************************************
- *** ***
- *******************************************
- getpicinfo:
- lea pic,a0
- move.w #pc_Sizeof-1,d0
- gpi1: clr.b (a0)+
- dbra d0,gpi1
-
- clr.l picture
- move.l table,a1
- move.l piclength,d0
- clr.w d1
- clr.w d2
- move.l m_alloc(a1),a1
- jsr (a1) ;allocate memory for the picture
- move.l a0,picture
- clr.l picoffset
-
- move.l (a0),a0 ;read in the entire picture
- move.l piclength,d0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
-
- gpi2: lea pic,a0
- clr.l d0
- move.b #PC_BW,d0
- move.w d0,pc_Type(a0)
- move.w #-1,pc_SFreq(a0)
- move.w #-1,pc_SAngle(a0)
- move.w #0,pc_SSpot(a0)
- move.l #0,pc_SMap(a0)
- move.l #0,pc_SMap+4(a0)
- move.w #72,pc_XDpi(a0)
- move.w #72,pc_YDpi(a0)
- move.w #576,pc_W(a0) ;always this width
- move.w #720,pc_H(a0) ;always this height
- move.w #72,pc_Width(a0) ;bytes per row
- move.w #1,pc_BitPln(a0)
- move.w #0,pc_Palet(a0)
-
- rts
-
-
- *******************************************
- *** ***
- *******************************************
- putpic:
- clr.l picoffset
-
- move.w pic+pc_Width,d0 ;set amiga bitmap to all white ($ff)
- mulu pic+pc_BitPln,d0
- mulu pic+pc_H,d0
- move.l d0,d1
- swap d1
- move.l picptr,a0
- bra pp2
- pp1: move.b #$00,(a0)+
- pp2: dbf d0,pp1
- dbf d1,pp1
-
- move.l picture,a0
- move.l (a0),a0
- add.l #640,a0 ;push a0 ahead to the pict data
-
- bsr pckcomp
-
- bra purgepic
-
- **********************************
- ** **
- **********************************
- pckcomp:
- clr.l d6
- clr.l d0
-
- move.w #720,d5 ;always 720 rows tall
-
- move.w pic+pc_W,d6 ;d6 = number of bytes in row
- add.w #7,d6
- lsr.w #3,d6
- move.w d6,d0 ;d0 = save d6
- bra pk8
-
- pk1: move.w d0,d6 ;reset d6 to number of bytes in row
- move.l picptr,a1 ;a1 = adress in amiga bitmap
-
- pk2: clr.l d1
- move.b (a0)+,d1 ;d1 = one byte code
- cmp.b #128,d1
- beq.s pk2 ;code 128 = do nothing, so get next byte
-
- btst #7,d1 ;check the high bit
- beq op2 ;if 0 copy the next d1+1 bytes as is
-
- op1: neg.b d1 ;else copy the next byte -d1+1 times
- sub.b d1,d6 ;decrement row byte count
- subq.w #1,d6
-
- move.b (a0)+,d2 ;get the byte to copy
- op12: move.b d2,(a1)+ ;copy the byte
- dbf d1,op12 ;loop until done (d1=-1)
- bra pk6
-
- op2: sub.b d1,d6 ;decrement row byte count
- subq.w #1,d6
-
- op22: move.b (a0)+,(a1)+
- dbf d1,op22
-
- pk6: tst.w d6 ;are we done with a row yet
- bne pk2 ;no - keep going
-
- move.l a1,d6
- btst #0,d6 ;did we end on an odd address
- beq pk7
- move.b #0,(a1)+
-
- pk7: move.l picptr,a1
- add.w pic+pc_Width,a1
- move.l a1,picptr
-
- pk8: dbf d5,pk1
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- Mulu1632:
- move.l table,a0
- move.l mulu1632(a0),a0
- jmp (a0)
-
- ***********************************
- *** ***
- ***********************************
- Divu1648:
- move.l table,a0
- move.l divu1648(a0),a0
- jmp (a0)
-
- ***********************************
- *** ***
- ***********************************
- errrts: bsr purgepic
- move.l savesp,sp
- rrts: rts
-
- purgepic:
- tst.l picture
- beq rrts
- move.l picture,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
- rts
-
- *******************************************************************
- *** called when the import routine choosen finds something ***
- *** wrong with the file loaded. ***
- *******************************************************************
- never: clr.w d0
- rts
-
- maybe: move.w #1,d0
- rts
-
- right: move.w #2,d0
- rts
-
- *************************************************************
- *************************************************************
- SECTION MACPAINT,DATA,PUBLIC
-
- special:
- dc.w 2
- dc.l spcl1,spcl2
-
- vers: dc.b "$VER: "
- name: dc.b "MacPaint v2.0.2",0
-
- spcl1: dc.b "Picture Window",0
- spcl2: dc.b "Object",0
-
- test: dc.b "PNTG",0
-
- SECTION MACPAINT,BSS,PUBLIC
- temp: ds.l 1
- temp2: ds.l 1
- savesp: ds.l 1
- picptr: ds.l 1
- pptr: ds.l 1
- pic: ds.w pc_Sizeof/2
- object: ds.w ob_SizeOf/2
-
- picture: ds.l 1
- picoffset: ds.l 1
- piclength: ds.l 1
-
-
-
- ****************************** CHANGES ************************************
- ;
- ; version 2.0.2
- ;
- ; - added a version string
- ;
- ;
- ; version 2.0.1
- ;
- ; - changed the default pc_SFreq and pc_SAngle from 0 to -1
- ;
- ; - now only checks the TYPE field for PNTG (not creator for MPNT)
- ;
- ;
- ; version 2.0.0
- ;
- ; - initial release (shipped with PgS v2.0)
-